package 每日一题;

import java.util.*;

public class No227基本计算器II {

    /**
     * 给你一个字符串表达式 s ，请你实现一个基本计算器来计算并返回它的值。
     * 整数除法仅保留整数部分。
     *
     * 示例 1：
     * 输入：s = "3+2*2"
     * 输出：7
     * 示例 2：
     * 输入：s = " 3/2 "
     * 输出：1
     * 示例 3：
     * 输入：s = " 3+5 / 2 "
     * 输出：5
     *  
     * 提示：
     * 1 <= s.length <= 3 * 105
     * s 由整数和算符 ('+', '-', '*', '/') 组成，中间由一些空格隔开
     * s 表示一个 有效表达式
     * 表达式中的所有整数都是非负整数，且在范围 [0, 231 - 1] 内
     * 题目数据保证答案是一个 32-bit 整数
     */

    public int calculate(String s) {

        // 多位数 + - * /
        // 11 + 123 * 5 + 77 / 7 + 7 + 7 / 4 + 15

        Stack<Integer> stack = new Stack<>();
        char[] arr = s.toCharArray();
        char lastC = '+';
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == ' ') {
                continue;
            }
            if (Character.isDigit(arr[i])) {
                int num = arr[i++] - '0';
                // 将数字读完
                while (i < arr.length && Character.isDigit(arr[i])) {
                    num *= 10;
                    num += arr[i] - '0';
                    i++;
                }
                Integer lastNum = null;
                // 获取到了当前数字,看上一位符号是什么
                switch (lastC) {
                    case '+':
                        stack.add(num);
                        break;
                    case '-':
                        stack.add(-num);
                        break;
                    case '*':
                        lastNum = stack.pop();
                        num *= lastNum;
                        stack.add(num);
                        break;
                    case '/':
                        lastNum = stack.pop();
                        lastNum /= num;
                        stack.add(lastNum);
                        break;
                }
            }
            if (i < arr.length) {
                lastC = arr[i];
            }
        }

        int result = 0;

        while (!stack.isEmpty()) {
            result += stack.pop();
        }

        return result;
    }

    public static void main(String[] args) {
        No227基本计算器II n=new No227基本计算器II();
        int result = n.calculate("3+22*22");
        System.out.println(result);
    }

}
